package com.hhs.storage.bean;

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableField;
import com.hhs.storage.util.SysUtil;
import lombok.Data;
import org.apache.commons.lang.StringUtils;
import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *
 * </p>
 *
 * @author hhs
 * @since 2022-11-30
 */
@Data
public class Contract implements Serializable {
    public static final int STATUS_DELETE=0;//废弃，用于已经报单，但删除合同
    public static final int STATUS_CREATE=1;//新建
    public static final int STATUS_CHECK=2;// 初审
    public static final int STATUS_CHECK_FINAL=4;// 终审
    public static final int STATUS_TEMP=5;//临时合同
    public static final int STATUS_MODIFY=6;//修改
    public static final int STATUS_FINISHED=7;//流程结束

    public static final int STATUS_JUNIOR_DEAL=1;// 当前待处理
    public static final int STATUS_JUNIOR_RETURN=2;//被驳回


    private static final long serialVersionUID = 1L;

    private String id;

    /**
     * 合同编号
     */
    private String code;

    /**
     * 甲方
     */
    private String firstParty;

    /**
     * 乙方
     */
    private String secondParty;

    /**
     * 合同项目
     */
    private String project;

    /**
     * 金额
     */
    private Integer totalPrice;

    /**
     * 数量
     */
    private Integer amount;

    /**
     * 单价
     */
    private Integer price;

    /**
     * 型号
     */
    private String modelType;
    private String contractType;

    @JSONField(format="yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate endTime;
    /**
     *签约时间
     */
    @JSONField(format="yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate signTime;
    private String payType;
    private String payWay;

    /**
     * 业务负责人
     */
    private String principal;

    /**
     * 合同录入人
     */
    private String creater;
    @JSONField(format="yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    /**
     * 续约：1是 0否
     **/
    private Integer isExtension;
    /**
     * 自提：1是 0否
     **/
    private Integer isSelf;

    /**
     * 状态：1新建合同   5 临时合同 7结束
     **/
    private Integer status;
    /**
     * 合同到期是否提醒：默认1 要提醒，0 不需要
     * 一个月内需要预警
     **/
    private Integer isExpireCaution;


    /**
     * 是否临时合同：1是 0否
     **/
    private Integer isTemp;
    /**
     合同的所有流程
     **/
    @TableField(exist = false)
    private List<Flow> flowList;

    /*
     * 合同当前流程
     **/
    @TableField(exist = false)
    private Flow curFlow;
    /**
     * 当前产品供应商ids
     */
    @TableField(exist = false)
    private String productSupplierIds;

    /**
     * 客户信息
     */
    @TableField(exist = false)
    private String clientObj;

    public String getStatusStr() {
        if(this.getStatus()==null) {
            return "";
        }
        if(this.getStatus().equals(Contract.STATUS_CREATE)){
            return "审核中";
        }else if(this.getStatus().equals(Contract.STATUS_FINISHED)){
            return "审核结束";
        }else{
            return "";
        }
    }
    public String getFirstPartyName(){
        List<Comsumer> list= SysUtil.COMSUMER_LIST;
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getId().equals(this.firstParty)){
                return list.get(i).getName();
            }
        }
        return null;
    }
    public String getSecondPartyName(){
        List<Comsumer> list= SysUtil.COMSUMER_LIST;
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getId().equals(this.secondParty)){
                return list.get(i).getName();
            }
        }
        return null;
    }
    public String getContractTypeName(){
        List<TypeDic> list= SysUtil.CONTRACT_TYPE_LIST;
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getId().equals(this.contractType)){
                return list.get(i).getName();
            }
        }
        return null;
    }
    public List<TypeDic> getModelTypeName(){
        List<TypeDic> list= SysUtil.MODEL_TYPE_LIST;
        List<TypeDic> arr=new ArrayList<>();
        if (StringUtils.isNotEmpty(this.modelType)){
            String[] ids=this.modelType.split(",");
            for (int i = 0; i < list.size(); i++) {
                for (int j = 0; j < ids.length; j++){
                    if (list.get(i).getId().equals(ids[j])){
                        arr.add(list.get(i));
                    }
                }

            }
        }
        return arr;
    }
    public String getPayTypeName(){
        List<TypeDic> list= SysUtil.PAY_TYPE_LIST;
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getId().equals(this.payType)){
                return list.get(i).getName();
            }
        }
        return null;
    }
    public String getPayWayName(){
        List<TypeDic> list= SysUtil.PAY_WAY_LIST;
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getId().equals(this.payWay)){
                return list.get(i).getName();
            }
        }
        return null;
    }
}


